Python进行Excel数据处理

您所在的位置:网站首页 python excel 处理 Python进行Excel数据处理

Python进行Excel数据处理

2024-01-03 23:47| 来源: 网络整理| 查看: 265

Python进行Excel数据处理 思路实现1. 使用openpyxl2. 使用xlrd和xlwt 总结

前两天GF让用Python写个Excel表格处理脚本,在这里记录一下。某公司有个数据统计汇总表格,仅为初表,复制粘贴汇总而来。初表中,存在同一员工推荐多套商品以及各自金额,目标呢:合并同类项,并把推荐数量和金额进行累加。文字解释不太清楚,上图说话。 原始图片 original 原始图片 目标图片 final 在这里插入图片描述

思路

Step 1: 涉及excel文件的读写,在此使用openpyxl或者xlrd和xlwt组合,需要了解其中的方法和单元格操作。 Step 2: 需要进行人名和推荐数量配对,以及累计金额的累加,在此使用字典数据类型。此外由于存在推荐多套的情况,在此需要进行一键对多值的映射,对于字典中值的初始化,使用列表方便改变数量。 Step 3:在“累计认购金额”条目,需要注意单元格内的内容格式是数字类型还是文本类型,如果是数字类型,可以使用sum函数累加,如果是文本类型,需要使用int函数转化为数值在累加,也可使用map函数进行字符到数字的映射。

实现 1. 使用openpyxl # By WDL 2020-3-31 from openpyxl import Workbook, load_workbook wb= load_workbook("XXX公司推荐成交明细.xlsx") ws=wb["Sheet1"]#也可以使用wb.get_sheet_by_name("Sheet1") 获取工作表 # 读取数据,把excel中的一个table按行读取出来,存入一个二维的list total_list=[] for row in ws.rows: row_list=[] for cell in row: row_list.append(cell.value) total_list.append(row_list) # 利用字典进行数据统计 namedict={} valuedict={} for term in total_list: if term[1] == None or term[1] == "员工姓名":# 员工姓名列 continue else: namedict[term[1]]=namedict.get(term[1],0)+1 valuedict.setdefault(term[1],[]).append(term[-1]) #一键 对多值的字典 #保存写操作 newwb = Workbook() newsheet=newwb.active newsheet.title="Sheet1" #表头 newsheet["A1"]=total_list[0][0] newsheerge_cells("A1:C1") #合并单元格 newsheet["A2"]="员工姓名" newsheet["B2"]="推荐数量" newsheet["C2"]="累计认购金额" #单元格 i=3 for name in namedict: newsheet.cell(row=i,column=1).value=name newsheet.cell(row=i, column=2).value=namedict[name] newsheet.cell(row=i, column=3).value =sum(valuedict[name]) i=i+1 newwb.save("XXX公司推荐成交明细_final.xlsx") 2. 使用xlrd和xlwt # By WDL 2020-3-31 import xlrd,xlwt wb=xlrd.open_workbook("XXX公司推荐成交明细.xlsx") ws=wb.sheet_by_index(0) print(ws.row_values(2)) #每一行作为一个列表 total_list=[] for row in range(ws.nrows): row_list=ws.row_values(row) total_list.append(row_list) namedict={} for items in total_list: if items[1]==None or items[1]=="员工姓名": continue else: if items[1] in namedict.keys(): namedict[items[1]]["推荐数量"] += 1 namedict[items[1]]["累计认购金额"] +=items[-1] else: namedict.setdefault(items[1], {}) namedict[items[1]].setdefault("推荐数量",1) namedict[items[1]].setdefault("累计认购金额", items[-1]) # 写操作 wb = xlwt.Workbook() ws = wb.add_sheet("Sheet1") ws.write(0,0,label ="test") wb.save("测试.xls") #xlwt貌似只支持xls格式

xlrd和xlwt模式没有写全,本人太懒,有兴趣的朋友可以自己试着补全。需要注意,xlwt貌似只支持保存为.xls的表格。并且,在第二种方法中,使用了字典的嵌套,第一层字典的键为名字,值为字典。

总结

openpyxl和xlrd/xlwt中需要注意单元格的索引,openpyxl单元格行列编号从1开始,而xlrd/xlwt的编号从0开始。其他关于字体格式,以及自动化识别的操作,本人太懒没再研究。

[1]: openpyxl 的使用 - excel中数据转成列表/ 字典https://blog.csdn.net/GYK0812/article/details/104380629/ [2]: Python Openpyxl快速入门教程 https://blog.csdn.net/qq_33353186/article/details/79191069



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3